package org.example.controller;
//跟旅游记忆相关的页面跳转
//
//
//

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.example.mapper.TraCommentMapper;
import org.example.mapper.TraMemoryMapper;
import org.example.mapper.TraTypMapper;
import org.example.mapper.UserMapper;
import org.example.pojo.TraComment;
import org.example.pojo.TraMemory;
import org.example.pojo.TraType;
import org.example.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller//表示这是一个控制层
//Controller跳转的是页面
//@RestController("/mepage")//既支持get又支持set，@RestController这个是添加路径的。
//前面有@Requestmapping后面有@getmapping,
//那么最终查询的路径为://http://localhost:8081/mepapge/addm
//在方法外再加一个路径是双层路径，也可以把双层路径一起写到里面。
@RequestMapping()
public class MePageController {
    @Autowired
    TraTypMapper ttm;//ttm中注入了SQl得许多操作，可以直接通过ttm调用很方便
    @Autowired
    TraMemoryMapper tmm;//不能用ttm，要新建一个；每一个都要加一个注解，一个注解智能影响一个变量。
    @Autowired
    UserMapper um;
    @Autowired
    TraCommentMapper tc;

    @GetMapping("/tramem")
    public String goMemoryIndex(Model model) {
        //在进入旅游记忆首页之前需要先把旅游记忆的数据提前拿出来放到首页中。
        //差选旅游记忆数据，
        //获取类型
        //public String gomemory(Model model){

            // 获取类型和id
            List<TraType> traTypes = ttm.selectList(null);
            // 初始化一个大列表来存储键值对
            List<Map<String, Object>> mapList = new ArrayList<>();

            for (int i = 0; i < traTypes.size(); i++) {
                TraType tt = traTypes.get(i);

                QueryWrapper qw = new QueryWrapper();
                qw.eq("typeid", tt.getId());
                qw.orderByDesc("pubtime");
                qw.last("LIMIT 4");
//            System.out.println(tt.getUsername());
                List<TraMemory> memories = tmm.selectList(qw);

                // 将键值对添加到列表中
                Map<String, Object> map = new HashMap<>();
                map.put("name", tt.getName());
                map.put("list", memories);
                mapList.add(map);
            }

            // 添加最终的map列表到模型中
            model.addAttribute("mapList", mapList);

            return "html/memory/memory";

        }

        @GetMapping("/tramemdl")
        public String tramemdetail(Model model, int id ,int curpage,HttpServletRequest req)
        {
                // 获取类型和id
                List<TraType> traTypes = ttm.selectList(null);
                QueryWrapper qw = new QueryWrapper();
                qw.eq("id", id);
                TraMemory memory = tmm.selectOne(qw);

                //筛选出id=id的用户信息
                QueryWrapper qw1 = new QueryWrapper();
                qw1.eq("id", memory.getUid());
                //只查询一条数据
                User user = um.selectOne(qw1);

                //筛选出id=id的活动类别名
                QueryWrapper qw2 = new QueryWrapper();
                qw2.eq("id", memory.getTypeid());
                //只查询一条数据
                TraType tt = ttm.selectOne(qw2);

                System.out.println("我的值！！！！！！！！！！！！！！！："+curpage);

                //上传评并且给评论进行分页
                //先创建一个分页对象，传入当前叶子页以及每页传入几条记录。
                Page<TraComment> userPage = new Page<>(curpage,2);
                IPage<TraComment> traComments = tc.getComments(userPage, id);//traComments是总页面,分页面才是list对象
                //其次把评论通过model传入到网页
                model.addAttribute("pages", traComments);
//                List<TraComment> records = traComments.getRecords();



                User user1 = (User)req.getSession().getAttribute("user");//从req中


                // 添加最终的map列表到模型中
                model.addAttribute("typename", tt.getName());
                model.addAttribute("memory", memory);
                model.addAttribute("username", user.getUsername());
                //获取本地登录用户的头像
                if (user1!=null)
                {
                    model.addAttribute("pic", user1.getPic());

                }




//                model.addAttribute("id",)



            return "/html/memory/memory_detail";

        }


    @GetMapping("/mepage/addm")//注意名字要编写的不能重复,可以通过该路径访问方法返回了html文件。
    public String goAddMemory(Model model) {
        //可以查询数据库，获取数据，通过model或session
        //查询记忆类别，返回到前台

        List<TraType> traTypes = ttm.selectList(null);//数据库表中的数据查询完返回到这个界面
        model.addAttribute("tlist", traTypes);//model用于向视图传递数据，此方法中把收集到的traTypes放到tlist中,html页面可以通过tlist这个列名来访问这段数据。

        return "/html/user/memory_add";//加'/'是绝对路径保证从根目录开始找
    }
}





















